/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package our.gui;

import java.util.Comparator;
import java.util.Vector;

/**
 * Questa è la classe che si prende carico di ordinare 'computazionalmente' le 
 * colonne di una griglia.
 * @author keysman
 */
public class ColumnSorter implements Comparator {
    int colIndex;
    boolean ascending;
    
    public ColumnSorter(int colIndex, boolean ascending)
    {
        this.colIndex = colIndex;
        this.ascending = ascending;
    }
    
    public int compare(Object a, Object b) {
        Vector v1 = (Vector)a;
        Vector v2 = (Vector)b;
        Object o1 = v1.get(colIndex);
        Object o2 = v2.get(colIndex);
        // Gestisce gli oggetti vuoti come null
        if(o1 instanceof String && ((String)o1).length() == 0) {
            o1 = null;
        }
        if(o2 instanceof String && ((String)o2).length() == 0) {
            o2 = null;
        }
        // Ordina i null posizionandoli in coda
        if(o1 == null && o2 == null) {
            return 0;
        } else if (o1 == null) {
            return 1;
        } else if (o2 == null) {
            return -1;
        } else if (o1 instanceof Comparable) {
            if(ascending) {
                return ((Comparable)o1).compareTo(o2);
            } else {
                return ((Comparable)o2).compareTo(o1);
            }
        } else {
            if(ascending) {
                return o1.toString().compareTo(o2.toString());
            } else {
                return o2.toString().compareTo(o1.toString());
            }
        }
    }
}

